home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / COMPILER / SATHER / !Sather / Library / Containrs / sa / map < prev    next >
Text File  |  1996-04-09  |  3KB  |  75 lines

  1. ---------------------------> Sather 1.1 source file <--------------------------
  2. -- $Id: map.sa,v 1.3 1996/04/09 10:05:11 borisv Exp $
  3. -- Author: Holger Klawitter <holger@math.uni-muenster.de>
  4. -- Benedict Gomes: Many changes..
  5. -- Abstract and concrete mappings from K (items) to E (data).
  6. --   $MAP{K,E}     :An abstract map
  7. --   MAP_INCL{K,E} :Partial class for Maps
  8. --   H_MAP{K,E}    :A concrete map based on data buckets
  9. --   TEST_MAP      :Test class for MAP{K,E}
  10. --------------------------------------------------------------------------
  11.  
  12. abstract class $RO_MAP{K,E} < $CONTAINER{E}, $STR is
  13.    -- A read-only map abstraction that does not permit modifications.
  14.    -- A mapping abstraction from elements of type K to elements of type E
  15.    -- A map stores an element of type E under a key of type K.
  16.    -- Each key can hold one element. 
  17.    -- 
  18.    -- Design note: It would also be reasonable to have a $RO_MAP be
  19.    -- a subtype of $CONTAINER{TUP{K,E}}. However, since we are using
  20.    -- the array notation, to avoid confusion with the way arrays behave
  21.    -- we view maps as containers of the target elements, with the
  22.    -- keys being a kind of indexing method. Arrays are then a special
  23.    -- kind of map where the keys are integers. Though we don't make
  24.    -- use of this possibility in this library, the use of array
  25.    -- notation is consistent with it.
  26.  
  27.  
  28.    -- has(e: E): BOOL;
  29.    -- Inherited: Return true if the map contains the element "e". Could be 
  30.    -- very expensive
  31.    
  32.    has_ind(k:K): BOOL;
  33.    -- Returns 'true' if 'k' is mapped to an element.
  34.  
  35.    has_elt(e: E): BOOL;
  36.    -- Same as "has"
  37.    
  38.    aget(k:K): E;
  39.    -- Returns the element k is mapped to.
  40.    -- If k is absent:
  41.    --        If E < $IS_NIL return E::nil othewise return void 
  42.  
  43.    -- size: INT;
  44.    -- Inherited: Returns the number of indices/elements in the mapping
  45.  
  46.    ind!: K;
  47.    -- Yields the indices (keys) of the mapping
  48.    
  49.    -- elt!: E;
  50.    -- Inherited: Yields the elements of the mapping
  51.    
  52.    pair!: TUP{K,E};
  53.    -- Yields the the elements or a tuple containing both
  54.    -- in arbitrary order.
  55.  
  56.    
  57. end;
  58. --=============================================================================
  59. abstract class $MAP{K,E} < $RO_MAP{K,E} is
  60.    -- A modifiable MAP
  61.    -- Elements are stored in a map using the aset notation.
  62.    -- Further assignments to a key will result in a replacement.
  63.  
  64.    aset(k:K,e:E);
  65.    -- Maps k to e. If k is already mapped, replace the old
  66.    -- maping with ne new one.
  67.  
  68.    delete(k:K);
  69.    delete(k:K): E;
  70.    -- Removes the mapping from k. The element k was mapped to
  71.    -- will be returned (or an appropiate non-value).
  72.  
  73. end;
  74. --=============================================================================
  75.